// JavaScript Document
/**
 Javascript 函数库
 @author 刘腾达
 */
 /**
  解决IE不支持trim()的方法
  */
  if(typeof String.prototype.trim !== 'function') {
  	String.prototype.trim = function() {
		return this.replace(/^\s+|\s+$/g, ''); 
  	}
  }
  
  /**
   世联地产，搜索与可选词联动效果
   2011/7/7
   */
var V = {
	posturl			: window.autotext_url,
	tableid			: "#selecttable",
	tablediv		: "#select",
	keywordinput	: ".genesisAjaxSearch",
	keywordinputid	: '',
	keyinputform	: '',
	key				: 0,
	keyword			: '',
	keytype			: '',
	result			: null,
	total			: 0,
	index			: -1,
	previndex		: -1,
	mouseonindex	: -1,
	selecting		: false,
	msmove			: false,
	clock			: 0,
	leavecallback	: '',
	
	startrender   : function() {
		$("body").prepend('<div id="select" name="select" style="background:#CCC; width:300px; z-index:10000; display:block; position:absolute;" class="select"><table width="100%" id="selecttable"></table></div>');
		
		/**
		 * 如果输入框存在默认值，保留该默认值
		 */
//		if()
	},
	/**
	 * 根据json数据渲染DIV块
	 */
	render	: function(json) {
		$(V.tablediv).css('display', 'block');
		$(this.tableid).html('');
		
		/**
		 *  如果有关键词和某个数据相同且ID唯一,将其记录
		 */
		 if(json.setting.sameid > 0) {
		 	 $(V.keywordinputid+"hidden").val(json.setting.sameid);
		 }
		 
		/**
		 * 用json的值填充table
		 */
		var i = 0;
		for(var key in json.data) {
			$(this.tableid).append('<tr key="'+key+'" val="'+json.data[key]+'" index="'+i+'"><td>'+json.data[key]+'</td></tr>');
			i++;
		}
		V.total = json.setting.count;
		return;
	},
	
	/**
	 * 根据索引值的变化，确定哪一项被染色
	 */
	framemove	: function() {
		$("table tr").eq(this.previndex).removeClass('sel');
		$("table tr").eq(this.index).addClass('sel');
		V.key = $("table tr").eq(this.index).attr('key');
		var v = $("table tr").eq(this.index).attr('val');
		$(V.keywordinputid+"hidden").val(V.key);
		$(V.keywordinputid).val(v);
	},
	
	/**
	 * 停止渲染可选项，DIV块消失
	 */
	stoprender	: function() {
		V.selecting = false;
		$(V.tablediv).remove();
	}
};
	
(function(window){
	var JsSearch = {
		/**
		 * 检查值，输入词发生变化则进行搜索
		 */
		chkvalue: function() {
			/**
			 * 判断输入此是否和上一次的关键词相同
			 */
			var v = $(V.keywordinputid).val().trim();
			
			if(V.keyword != v) {
				/**
				 * 关键词有变动更新隐藏域
				 */
				V.keyword = v;
				$.ajaxSetup({
					async: false
				});
				if(V.keyword == '') {
					$(V.tableid).html('');
				}
				/**
				 * 用户处于非选词状态，并且关键词不为空，则将数据POST到服务器
				 */
				if(!V.selecting && V.keyword != '') {
					$(V.keywordinputid+"hidden").val(0);
					$.post(V.posturl,{keyword:V.keyword,keytype:V.keytype}, function(json){
						V.render(json);
					}, 'json');
				}
			}
		},
		
		/**
		 * 按方向键时，处理上，下键用以选词。按空格键表示选词结束
		 */
		keypress	: function(e) {
			var code = e.which;
			/**
			 * 按“向上”键
			 */
			if(code == 38) {
				V.selecting = true;
				V.previndex = V.index;
				V.index--;
			}
			
			/**
			 * 按向下键
			 */
			else if (code == 40) {
				V.selecting = true;
				V.previndex = V.index;
				V.index++;
			}
			
			/**
			 * 回车键
			 */
			else if (code == 13) {
				V.stoprender();
			}
			
			/**
			 * 其他按键
			 */
			else {
				V.selecting = false;
			}

			if(V.index > V.total) {
				V.index = 0;
			}
			if(V.index < 0) {
				V.index = V.total;
			}
			if(V.selecting) {
				V.framemove();
			}
			return;
		},
		
		mousemove	: function(e) {
			$("#select table tr").mousemove(function(){
				V.msmove 		= true;
				V.mouseonindex 	= $(this).attr('index');
				return true;
			});

			/**
			 * 鼠标在可选项上滑动
			 */
			if(V.msmove) {
				V.previndex	= V.index;
				V.index		= V.mouseonindex;
				V.selecting = true;
				V.framemove();
			}
			V.msmove = false;
			return;
		},
		init	: function() {
			V.index = -1;
			V.total = 0;
		}
	};
	window.jssearch = JsSearch;
})(window);
window.jssearch.init();

$(V.keywordinput).focus(function(){
	V.keywordinputid = "#"+$(this).attr('id');
	if($(V.keywordinputid+"hidden").val() !== "0") {
		V.keyword = $(V.keywordinputid).val();
	}
	
	V.startrender();
	V.keytype = $(this).attr('keytype');
	var v_b = parseInt($(this).css('border-bottom-width'))+parseInt($(this).css('border-top-width'));
	var v_top =  parseInt($(this).css('padding-top'))
				+ parseInt($(this).css('padding-bottom'))
				+ parseInt($(this).height())
				+ parseInt($(this).offset().top)
				+ parseInt($(this).css('margin-top'))
				+ parseInt($(this).css('margin-bottom'))
				+ parseInt(4)+v_b ;
	var v_left = parseInt($(this).offset().left);
	$("#select").css('left', v_left);
	$("#select").css('top', v_top);
	V.clock = window.setInterval((function(){window.jssearch.chkvalue()}), 100);
});

/*
function aaa() {
	alert('ok');
}

V.leavecallback = aaa;
*/

$(V.keywordinput).blur(function(){
	window.clearInterval(V.clock);
	V.stoprender();
	V.clock = 0;
	if(V.leavecallback) {
		V.leavecallback(V);
	}
});
$(V.keywordinput).bind("focus", window.jssearch.keypress);
$("body").bind("keyup", window.jssearch.keypress);
$("body").bind("mousemove", window.jssearch.mousemove);



/**
 * 用于联动两个下拉框使用
 * first_select_id : 第一个下拉框的id
 * second_select_id : 第2个下拉框的id
 * url : 为第2个下拉框提供json数据的url地址
 */
function relate_selects_change(first_select_id, second_select_id, url) {
	(function getvalue(){
		var S1 = $('#' + first_select_id);
		var S2 = $('#' + second_select_id);
		var first = S1.val();
		var data = new Object();
		data.first = first;
		$.post(
				url,
				data,
				function(json){
					S2.empty();
					for (var ind in json) {
                    	S2.append($("<option value='" + ind + "'>" + json[ind] + "</option>"));
                	}
				},
				'json');
		
		/**
		 如果没有绑定则绑定change事件
		 */
		var o = typeof(S1.data('events'));
		var t = (o==='undefined') ? 'undefined' : typeof(S1.data('events')['change']);
		if(t ==='undefined') {
			S1.bind('change', getvalue);
		}
	}());
}


/**
 * 此方法可以根据某个CLASS判断其他区域中的表单是否为空
 */
$(".genesisLabelCheckbox").change(function(){
	var next = $(this).parent().next();
	
	if($(this).attr('checked') == 'checked') {
		$(next).find('input').removeAttr('disabled');
	} else {
		$(next).find('input').attr('disabled', 'disabled');
	}
});


	